# -*- coding: utf-8 -*-
"""
Created on Fri Jun 28 11:27:16 2024

@author: LENOVO
"""

#库函数的引入
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

#初始化绘图环境
plt.rc('font',family='SimHei')
plt.rc('font',size=16)
plt.rc('axes',unicode_minus=False)

#数据的引入
data=pd.read_excel('应力应变.xlsx',header=None)
data1=data.iloc[:,1:]
sigma=data1.values[0,0:]
epsilon=data1.values[1,0:]
sigma_epsilon=data1.values[2,0:]


#方法1：直接调用polyfit函数求最小二乘解
X=epsilon
Y=np.log(sigma_epsilon)

c=np.polyfit(X,Y,1)
k1=np.exp(c[1])
k2=-c[0]
# print('线性化方法确定的参数k1:',k1)
# print('线性化方法确定的参数k2:',k2)
# # plt.subplot(2,1,1)
f1=lambda x:k1*x*np.exp(-k2*x)
xi=np.linspace(0,0.0025,101)
# plt.plot(epsilon,sigma, 'rd', ms=8, mfc='g', label='原始数据点')
# plt.plot(xi, f1(xi), 'b-', lw=3, label='拟合曲线')
# plt.legend()
# plt.title('直接调用polyfit函数求最小二乘解')
# plt.show()
# plt.grid()
# plt.xlabel('应变ε')
# plt.ylabel('应力σ/(N/㎡)')
# #误差分析
e=f1(epsilon)-sigma
maxe=abs(max(e))
mse=np.mean(e**2)
# print('均方误差mse=',mse)
# print('最大误差axe=',maxe)
# -*- coding: utf-8 -*-
"""
Created on Fri Jun 28 11:10:24 2024

@author: LENOVO
"""
print(1.354619)


#初始化绘图环境
plt.rc('font',family='SimHei')
plt.rc('font',size=16)
plt.rc('axes',unicode_minus=False)

#数据的引入
data=pd.read_excel('应力应变.xlsx',header=None)
data1=data.iloc[:,1:]
sigma=data1.values[0,0:]
epsilon=data1.values[1,0:]
sigma_epsilon=data1.values[2,0:]
m=epsilon.size

#方法1：求伪逆得线性方程组得最小二乘解
X=epsilon
Y=np.log(sigma_epsilon)
#构造（矛盾方程组的）系数矩阵
A=np.c_[epsilon,np.ones(m)]
#求解矛盾方程组的最小二乘解
# c=LA.pinv(A)@Y #或 c=LA.lstsq(A, Y)[0] / c=LA.pinv(A).dot(Y)
#输出所求的系数
k1=np.exp(c[1])
k2=-c[0]
# print('线性化方法确定的参数k1:',k1)
# print('线性化方法确定的参数k2:',k2)

#画原始数据点和拟合曲线
# f1=lambda x:k1*x*np.exp(-k2*x)
# xi=np.linspace(0,0.0025,101)
# plt.plot(epsilon,sigma, 'rd', ms=8, mfc='c', label='原始数据点')
# plt.plot(xi, f1(xi), 'm-', lw=3, label='拟合曲线')
# plt.legend()
# plt.title('求伪逆得线性方程组得最小二乘解')
# plt.show()
# plt.grid()
# plt.xlabel('应变ε')
# plt.ylabel('应力σ/(N/㎡)')

#误差分析
e=f1(epsilon)-sigma
maxe=abs(max(e))
mse=np.mean(e**2)
# print('均方误差mse=',mse)
# print('最大误差axe=',maxe)

